const { User, Query, Cloud } = require('../../utils/av-weapp-min');
const Order = require('../../model/order');

Page({
  data: {
    orders: [],
    user:{},
    error: null,
  },
  onLoad() {
    // 获得当前登录用户
    var self=this;
    var user = User.current();
    if(!user){
      User.loginWithWeapp().then(user => {
        // 调用小程序 API，得到用户信息
        console.log('13');
        wx.getUserInfo({
          success: ({userInfo}) => {
            // 更新当前用户的信息
            user.set(userInfo).save().then(user => {
              // 成功，此时可在控制台中看到更新后的用户信息
              self.setData({
                    'user':user.toJSON(),
              });
              return self.refreshOrders();
            }).catch(console.error);
          }
        });
      }).catch(console.error);
    }else{
      // 调用小程序 API，得到用户信息
      wx.getUserInfo({
        success: ({userInfo}) => {
          // 更新当前用户的信息
          user.set(userInfo).save().then(user => {
            // 成功，此时可在控制台中看到更新后的用户信息
            self.setData({
                  'user':user.toJSON(),
            });
               return self.refreshOrders();
          }).catch(console.error);
        }
      });
    }
  },
  onPullDownRefresh() {
    return this.refreshOrders().then(wx.stopPullDownRefresh);
  },
  refreshOrders() {
    return new Query(Order)
      .equalTo('user', User.current())
      .equalTo('status', 'SUCCESS')
      .descending('createdAt')
      .find()
      .then(orders => this.setData({ 
        orders: orders.map(order => Object.assign(order.toJSON(), {
          paidAt: order.paidAt.toLocaleString(),
        }))
      }))
      .catch(console.error);
  },
  donate() {
    wx.showToast({
      title: '正在创建订单',
      icon: 'loading',
      duration: 10000,
      mask: true,
    })
    Cloud.run('order').then((data) => {
      wx.hideToast();
      data.success = () => {
        wx.showToast({
          title: '支付成功',
          icon: 'success',
          duration: 1500,
        });
        setTimeout(this.refreshOrders.bind(this), 1500);
      }
      data.fail = ({errMsg}) => this.setData({ error: errMsg });
      wx.requestPayment(data);
    }).catch(error => {
      this.setData({ error: error.message });
      wx.hideToast();
    })
  }
});